package com.itany.corejava.code17_设计模式.工厂模式;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Miss Chen
 * @version 1.0
 * @date 2024年08月13日13:47
 */
public class ObjectFactory {
    private static Map<String,Object> objs;
    static{
        objs=new HashMap<>();

        try {

            BufferedReader br=new BufferedReader(new InputStreamReader(
                    ObjectFactory
                            .class
                            .getClassLoader()
                            .getResourceAsStream("objs.properties")));

            String line=null;
            while((line=br.readLine())!=null){
                //考虑空行，空行不解析
                if(!"".equals(line)){
                   String[] arr=line.split("=");
                   String key=arr[0];
                   String value=arr[1];
                   //存储到集合中的值是一个对象
                    //value对应的值是对象所在的包名.类名
                   Class c= Class.forName(value);

                   //通过反射调用类的无参的构成方法创建对象
                   Object obj=c.newInstance();
                   objs.put(key,obj);

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new ExceptionInInitializerError("ObjectFactory初始化失败");
        }
    }

    public static Object getObject(String key){
        Object obj=objs.get(key);
        if(obj==null){
            System.out.println("根据对应的key:"+key+"在配置文件中没有找到对应的配置");
            return null;
        }
        return obj;
    }
}
